/**
 * 
 */
package ec.edu.uce.tour.web.catalogos.controller;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;

import ec.edu.uce.tour.excepcion.UceTourException;
import ec.edu.uce.tour.facade.UceTourGeneralServicio;
import ec.edu.uce.tour.modelo.PaisTbl;
import ec.edu.uce.tour.web.utilitarios.Utilitario;

/**
 * @author gabenc
 * 
 */
@ManagedBean(name = "paisController")
@ViewScoped

public class PaisController implements Serializable{

	private static final long serialVersionUID = 1L;
	private String codigoPais;
	private String nombrePais;
	private Integer idEstado;
	private List<SelectItem> listaEstados = new ArrayList<SelectItem>() {
		/**
		 * 
		 */
		private static final long serialVersionUID = 1L;

		{
			add(new SelectItem(1, "Activo"));
			add(new SelectItem(2, "Inactivo"));
		}
	};

	private Integer idPais;
	private List<PaisTbl> listaPaises = new ArrayList<PaisTbl>();

	@EJB
	private UceTourGeneralServicio generalServicio;

	@PostConstruct
	public void init() {
		FacesContext.getCurrentInstance().getExternalContext()
	     .getSession(true);
		obtenerTablaPaises();
	}

	/**
	 * Metodo que guarda el pais
	 */
	public void guardarPais() {
		try {
			if (!nombrePais.trim().equals("")
					&& !codigoPais.trim().equals("")) {
				PaisTbl pais = new PaisTbl();
				pais.setPaiCodigo(codigoPais);
				pais.setPaiNombre(nombrePais);
				pais.setPaiEstado(idEstado == 1 ? "A" : "I");
				String mensaje = "";
				if (idPais != 0) {
					pais.setPaiIdPk(idPais);
					mensaje = "Se ha actualizado correctamente la provincia.";
					try {
						generalServicio.modificarCatalogo(pais);
						idPais = null;
						obtenerTablaPaises();
					} catch (UceTourException e) {
						// TODO Auto-generated catch block
						Utilitario.mensajeError(e.getLocalizedMessage(), e);
					} catch (Throwable e) {
						// TODO Auto-generated catch block
						Utilitario.mensajeError(e.getLocalizedMessage(), e);
					}
				} else {
					try {
						generalServicio.guardarCatalogo(pais);
						mensaje = "Se ha guardado correctamente.";
						obtenerTablaPaises();
					} catch (UceTourException e) {
						// TODO Auto-generated catch block
						Utilitario.mensajeError(e.getLocalizedMessage(), e);
					} catch (Throwable e) {
						// TODO Auto-generated catch block
						Utilitario.mensajeError(e.getLocalizedMessage(), e);
					}
				}
				Utilitario.mensajeInformativo(mensaje);
			} else {
				Utilitario.mensajeError("Por favor ingrese valores validos",
						null);
			}
		} catch (Exception e) {
			Utilitario.mensajeError(e.getLocalizedMessage(), e);
		}

	}
			

	private void obtenerTablaPaises() {
		try {
			listaPaises = generalServicio
					.obtenerListaCatalogos(PaisTbl.class);
		} catch (UceTourException e) {
			// TODO Auto-generated catch block
			Utilitario.mensajeError(e.getLocalizedMessage(), e);
		} catch (Throwable e) {
			// TODO Auto-generated catch block
			Utilitario.mensajeError(e.getLocalizedMessage(), e);
		}
	}
	
	public void editarPais(Integer idPais) {
		this.idPais = idPais;
		try {
			PaisTbl paisActual = (PaisTbl) generalServicio
					.cargarCatalogoPorId(PaisTbl.class, idPais);
			nombrePais = paisActual.getPaiNombre();
			idEstado = paisActual.getPaiEstado().equals("A") ? 1
					: 0;
			codigoPais = paisActual.getPaiCodigo();

		} catch (UceTourException e) {
			// TODO Auto-generated catch block
			Utilitario.mensajeError(e.getLocalizedMessage(), e);
		} catch (Throwable e) {
			// TODO Auto-generated catch block
			Utilitario.mensajeError(e.getLocalizedMessage(), e);
		}
	}

	
	public void cancelarPais()
	{
		init();
		idPais=null;
		codigoPais="";
		nombrePais="";
	}
	
	/**
	 * @return the codigoPais
	 */
	public String getCodigoPais() {
		return codigoPais;
	}

	/**
	 * @param codigoPais
	 *            the codigoPais to set
	 */
	public void setCodigoPais(String codigoPais) {
		this.codigoPais = codigoPais;
	}

	/**
	 * @return the nombrePais
	 */
	public String getNombrePais() {
		return nombrePais;
	}

	/**
	 * @param nombrePais
	 *            the nombrePais to set
	 */
	public void setNombrePais(String nombrePais) {
		this.nombrePais = nombrePais;
	}

	/**
	 * @return the idEstado
	 */
	public Integer getIdEstado() {
		return idEstado;
	}

	/**
	 * @param idEstado
	 *            the idEstado to set
	 */
	public void setIdEstado(Integer idEstado) {
		this.idEstado = idEstado;
	}

	/**
	 * @return the listaEstados
	 */
	public List<SelectItem> getListaEstados() {
		return listaEstados;
	}

	/**
	 * @param listaEstados
	 *            the listaEstados to set
	 */
	public void setListaEstados(List<SelectItem> listaEstados) {
		this.listaEstados = listaEstados;
	}

	/**
	 * @return the idPais
	 */
	public Integer getIdPais() {
		return idPais;
	}

	/**
	 * @param idPais
	 *            the idPais to set
	 */
	public void setIdPais(Integer idPais) {
		this.idPais = idPais;
	}

	/**
	 * @return the listaPaises
	 */
	public List<PaisTbl> getListaPaises() {
		return listaPaises;
	}

	/**
	 * @param listaPaises
	 *            the listaPaises to set
	 */
	public void setListaPaises(List<PaisTbl> listaPaises) {
		this.listaPaises = listaPaises;
	}

}
